<?php

class ModeleBoutique extends ModelePDO {

    // <editor-fold defaultstate="collapsed" desc="Traitement des Membres">

    /**
     * Retourne tous les tuple de la classe membre
     * @return type
     */
    public static function getLesMembres() {
        return self::getLesTuples('Membre');
    }

    /**
     * Retourne un membre avec l'id en paramètre
     * @param type $id
     * @return type
     */
    public static function getMembreById($id) {
        return self::getPremierTupleByChamp("Membre", "id", $id);
    }

    /**
     * Retourne une liste de membre avec le login en paramètre
     * @param type $login
     * @return type
     */
    public static function getLesMembresByLogin($login) {
        return self::getPremierTupleByChamp("Membre", "login", $login);
    }

    /**
     * Retourne le nombre de tuple de la classe membre
     * @return type
     */
    public static function getNbMembres() {
        return count(self::getLesMembres());
    }

    /**
     * Ajoute un membre a la table
     * @param type $membre
     */
    public static function addMembreInstance($membre) {
        self::insererTuple("Membre", $membre);
    }

    /**
     * Modifie le mot de passe d'un membre
     * @param type $leMembre
     * @param type $nouveauPass
     */
    public static function setPassMembre($leMembre, $nouveauPass) {
        self::modifierTupleByChamp("Membre", "passe", $nouveauPass, $leMembre->id);
    }

    /**
     * Supprime un membre par son id
     * @param type $id
     */
    public static function supprimerMembreById($id) {
        self::supprimerTupleByChamp("Membre", "id", $id);
    }

// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Traitement des Clients">

    /**
     * Retourne la liste des clients
     * @return type
     */
    public static function getLesClients() {
        return self::getLesTuples('Client');
    }

    /**
     * Retourne une liste de client avec la Ville comme paramètre
     * @param type $ville
     * @return type
     */
    public static function getLesClientsByVille($ville) {
        return self::getPremierTupleByChamp("Client", "ville", $ville);
    }

    /**
     * Retourne le nombre de tuple de la table client
     * @return type
     */
    public static function getNbClients() {
        return count(self::getLesClients());
    }

    /**
     * Ajoute un client
     * @param type $client
     */
    public static function addClientInstance($client) {
        self::insererTuple("Client", $client);
    }

    /**
     * Supprime un Client avec l'id en paramètre
     * @param type $id
     */
    public static function supprimerClientById($id) {
        self::supprimerTupleByChamp("Client", "idMembre", $id);
    }

    /**
     * Modifie la ville d'un client
     * @param type $ville
     * @param type $leMembre
     */
    public static function setVilleClient($ville, $leMembre) {
        self::modifierTupleByChamp("Client", "ville", $ville, $leMembre->id);
    }

    /**
     * Modifie le Code Postal du client
     * @param type $codepostal
     * @param type $leMembre
     */
    public static function setCodePostalClient($codepostal, $leMembre) {
        self::modifierTupleByChamp("Client", "codePostal", $codepostal, $leMembre->id);
    }

    /**
     * Modifie la rue du client
     * @param type $rue
     * @param type $leMembre
     */
    public static function setRueClient($rue, $leMembre) {
        self::modifierTupleByChamp("Client", "rue", $rue, $leMembre->id);
    }

// </editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Traitement des News">

    public static function getLesNews(){
        $lesNews = null;
        $News = self::getLesTuples("news");
        foreach ($News as $uneNews){/* @var News $uneNews */
            $nomAuteur = self::getPremierTupleByChamp("membre", "id", $uneNews->auteur); /* @var Membre $nomAuteur */
            $Membre = new Membre($nomAuteur->login, $nomAuteur->pass);
            $lesNews[] = new News($uneNews->titre,
                $uneNews->corp,
                $uneNews->date,
                $Membre->login,
                $uneNews->image,
                $uneNews->id);
        }
        // Lors de l'affichage des news on peut également utiliser " echo nl2br($laNews); " pour garder la mise en forme du text (espace,
        // retour à la ligne etc...)
        return $lesNews;
    }

    public static function getNewsById($id){
        $News = null;
        $uneNews = self::getPremierTupleByChamp("news", "id", $id);
        if ($uneNews != null){/* @var News $uneNews */
            $News[] = new News($uneNews->titre, $uneNews->corp, $uneNews->date, $uneNews->auteur,
                $uneNews->image);
            return $News;
        } else{
            throw new Exception("Aucune news de trouvée");
        }
    }

    public static function getLesNewsByAuteur($auteur){
        $lesNews = null;
        $News = self::getTupleByChamp("news", "auteur", $auteur);
        $Auteur = self::getPremierTupleByChamp("membre", "id", $auteur); /* @var Membre $Auteur */
        foreach ($News as $uneNews){
            $lesNews[] = new News($uneNews->titre,
                $uneNews->corp,
                $uneNews->date,
                $Auteur->login,
                $uneNews->image);
        }
        return $lesNews;
    }

    public static function getLesNewsOrderByDate(){
        self::select("SELECT * FROM news ORDER BY date DESC");
    }

    /**
     * @param $properties Array
     * @param $values Array
     * @throws Exception
     * @internal param as $properies Array
     */
    public static function addNews($properties, $values){
        self::insert("news", $properties, $values);
    }

    public static function deleteNews($idNews){
        self::supprimerTupleByChamp("news", "id", $idNews);
    }

    public static function modifNews($nomChamp, $valeurChamp, $idNews){
        self::modifierTupleByChamp("news", $nomChamp, $valeurChamp, $idNews);
    }

//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Traitement des catégories + boutique">

    public static function getLesCategories(){
        return self::getLesTuples("categories");
    }

    public static function getLesSousCategorie(){
        return self::getLesTuples("souscategorie");
    }

    public static function getCategorieByName($name){
        return self::getTupleByChamp("categories", "libelle", $name);
    }

    public static function getCategorieById($id){
        return self::getTupleByChamp("categories", "id", $id);
    }
    public static function getCategorieByIdSousCat($id){
        return self::select("Select c.id,c.libelle from categories c, souscategorie sc where sc.idCat=c.id and idSousCat = $id");
    }

    public static function getLesSousCategoriesByCategorie($id){
        return self::getTupleByChamp("souscategorie", "idCat", $id);
    }

    public static function getLesProduits(){
        $produits = self::getLesTuples("produit");
        $lesProduits = array();
        foreach ($produits as $unProduit) {/* @var $unProduit Produit */
            $lesProduits[] = new Produit($unProduit->nom,$unProduit->prix,$unProduit->description,$unProduit->image,$unProduit->idSousCat,$unProduit->id);
        }
    }

    public static function getFiveLastProduits(){
        return self::select("select * from produit order by id desc limit 0, 5");
    }

    public static function getProduitsByCategorie($idCat){
        return self::getTupleByChamp("produit", "idCat", $idCat);
    }

    public static function getProduitsBySousCategorie($idCat){
        return self::getTupleByChamp("produit", "idSousCat", $idCat);
    }

    public static function getIdCatByName($name){
        return self::select("select id from categories where libelle like '$name'");
    }

    public static function getIdSousCatByName($name){
        return self::select('select idSousCat from souscategorie where libelle like "%' . $name . '%"');
    }

    public static function getUserByLoginPass($login, $pass){
        return self::select("select * from membre where login = '$login' and pass = '$pass'");
    }

    public static function getProduitById($id){
        $unProduit = self::select("Select * from Produit where id = $id");
        $leProduit = new Produit($unProduit[0]->nom,$unProduit[0]->prix,$unProduit[0]->description,$unProduit[0]->image,$unProduit[0]->idSousCat,$unProduit[0]->id);
        return $leProduit;
    }

    public static function isUserAdmin($login, $pass){
        return self::select("select * from membre where login = '$login' and pass = '$pass' and admin = '1'");
    }

    //</editor-fold>

} 